home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / cbibcode.arc / EXECCHLD.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-08-05  |  1.7 KB  |  56 lines

  1. /* execchld.c--- BIBLE pp. 77-83 */
  2.  
  3. /* ======================= CHILD ========================= */
  4. /*        Must be in file named:  CHILD.EXE                */
  5. #include <stdio.h>
  6. #include <dos.h>
  7. #include <string.h>
  8. typedef struct TEST_DATA
  9. {
  10.     char name[20];
  11.     int n;
  12.     double x;
  13. } TEST_DATA;
  14.             /* CHILD:  First argument is program name,
  15.              *        Second one tells us how child is invoked
  16.              *       Third argument is an address in the form
  17.              *       SSSS:0000 (segment:offset).  This is the
  18.              *       address of a data structure allocated in
  19.              *       the parent. */
  20. static char far *cname = "CHILD";
  21. main(int argc, char **argv, char **envp)
  22. {
  23.     char ***p_table;
  24.     TEST_DATA far *pdata;
  25.     void far *p_s1;
  26.     void far *p_s2;
  27.     printf("CHILD:  received %d arguments\n", argc);
  28.     if(argc < 3)
  29.     {
  30.         printf("not enough arguments\n");
  31.         exit(1);
  32.     }
  33.     printf("CHILD invoked by a %s call.\n",argv[1]);
  34.  
  35.             /* Now print the environment passed to CHILD      */
  36.     printf("==== CHILD:  Environment contains ====\n");
  37.     for(p_table = envp; *p_table != NULL; p_table++)
  38.         printf("%s\n", *p_table);
  39.  
  40.             /* Read in address of parent's data from argv[2] */
  41.     sscanf(argv[2], "%Fp", (void far *)&pdata);
  42.     printf("In child:  name = %Fs, n = %d, x = %f\n",
  43.         pdata->name, pdata->n, pdata->x);
  44.         /* Put new values in the data strucute.  If CHILD was
  45.          * created by a "spawn" function call, this data will
  46.          * be available to the parent when child exits.
  47.          * Notice that we have to use "movedata" to copy
  48.          * "far" data in small or medium model. */
  49.     p_s1 = (void far *)cname;
  50.     p_s2 = (void far *)pdata->name;
  51.     movedata(FP_SEG(p_s1), FP_OFF(p_s1),
  52.     FP_SEG(p_s2), FP_OFF(p_s2), 6);
  53.     pdata->n = 101;
  54.     pdata->x = 999.99;
  55.     exit(0);
  56. }